The R markdown is available from the pulldown menu for Code at the upper-right, choose “Download Rmd”, or download the Rmd from GitHub.
scNetViz is a Cytoscape app designed to support the biological interpretation of scRNAseq experiments. This notebook describes the automation of the scNetViz app using the RCy3 package via two use cases.
Setup
The following use cases require installation of Cytoscape, the scNetViz app and RCy3 library. Download the latest http://www.cytoscape.org/download.php and load RCy3 package:
if(!"RCy3" %in% installed.packages()){
install.packages("BiocManager")
BiocManager::install("RCy3")
}
library(RCy3)
Launch Cytoscape and keep it running whenever using RCy3. Confirm that you have everything installed and that RCy3 is communicating with Cytoscape:
Install the scNetViz and stringApp Cytoscape apps:
installApp('STRINGapp')
installApp('scNetViz')
Use Case 1
In this example, we will browse a single cell expression atlas from within Cytoscape, explore a particular dataset, perform differential expression analysis based on provided categories, generate networks from the top genes from each category, and functionally characterize and visualize the networks.
Load data
This loads the data and opens an experiment table with three tabs, named TPM, Categories and DiffExp. We are going to load the dataset with Accession number E-MTAB-5553:
RCy3::commandsRun('scnetviz load gxa experiment accession=E-MTAB-5553')
Calculate Differential Expression
We will calculate differential expression for K=4 cluster:
RCy3::commandsRun('scnetviz calculate diffexp accession=E-MTAB-5553')
Create Networks
Fetch protein networks for each cluster. There should be four networks - one each for each cluster and one for all the clusters collectively. We will also collect a list of network names for downstream steps.
RCy3::commandsRun('scnetviz create network accession=E-MTAB-5553')
networks <- getNetworkList()
Alternative: Calculate Differential Expression and Create Networks
This is a one-step alternative which replaces the two steps above.
RCy3::commandsRun('scnetviz create all experiment=E-MTAB-5553')
Functional Enrichment Analysis
For each of the networks, we can now calculate functional enrichment using the stringApp. Each network is first “stringified” to enable the retrieval of functional enrichment:
lapply(networks, function (x){
setCurrentNetwork(x)
print(x)
RCy3::commandsRun('string retrieve enrichment allNetSpecies=Mus musculus')
RCy3::commandsRun('string show charts')
})
[1] "Cluster 4"
[1] "Cluster 2"
[1] "Cluster 1"
[[1]]
character(0)
[[2]]
character(0)
[[3]]
character(0)
Use Case 2
In this example, we will import normalized scRNA-seq data and cluster assignments from local files, generate cell plots, perform differential expression analysis based on provided categories, visualize as a combined heatmap and generate networks from the top genes from each category.
Load data from file
This notebook downloads and exports files to the same directory as this copy of the Rmd file:
url <- "https://raw.githubusercontent.com/cytoscape/cytoscape-automation/master/for-scripters/R/notebooks/scNetViz/RCy3_ExampleData/data/E-MTAB-5553-data/E-MTAB-5553-normalised-files.zip"
path <- file.path(workingDir, "E-MTAB-5553-normalised-files.zip")
download.file(url, path)
trying URL 'https://raw.githubusercontent.com/cytoscape/cytoscape-automation/master/for-scripters/R/notebooks/scNetViz/RCy3_ExampleData/data/E-MTAB-5553-data/E-MTAB-5553-normalised-files.zip'
cannot open URL 'https://raw.githubusercontent.com/cytoscape/cytoscape-automation/master/for-scripters/R/notebooks/scNetViz/RCy3_ExampleData/data/E-MTAB-5553-data/E-MTAB-5553-normalised-files.zip': HTTP status was '404 Not Found'Error in download.file(url, path) :
cannot open URL 'https://raw.githubusercontent.com/cytoscape/cytoscape-automation/master/for-scripters/R/notebooks/scNetViz/RCy3_ExampleData/data/E-MTAB-5553-data/E-MTAB-5553-normalised-files.zip'
Load the category data
completeFilePath <- file.path(workingDir, "E-MTAB-5553-data/E-MTAB-5553.clusters.tsv")
commandToAddCategory <- paste0('scnetviz add file category file=',completeFilePath)
RCy3::commandsRun(commandToAddCategory)
# RCy3::commandsRun('scnetviz add file category file=/Users/krishna.choudhary/Dropbox (Gladstone)/GR-scNetViz/E-MTAB-5553-data/E-MTAB-5553.clusters.tsv')
Generate a UMAP plot
#No plot displayed. ??
RCy3::commandsRun('scnetviz calculate UMAP scale=true')
[1] "D@17a1c43"
Generate heatmap
Generate a heatmap showing the top differentially expressed genes:
RCy3::commandsRun('scnetviz ??')
Fetch protein networks
RCy3::commandsRun('scnetviz create network accession=E-MTAB-5553')
LS0tCnRpdGxlOiAic2NOZXRWaXogVXNlIENhc2VzIgphdXRob3I6ICJLcmlzaG5hIENob3VkaGFyeSwgS3Jpc3RpbmEgSGFuc3BlcnMiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjb2RlX2ZvbGRpbmc6IG5vbmUKICAgIHRvY19mbG9hdDogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZApwYWNrYWdlOiBSQ3kzCi0tLQpgYGB7ciwgZWNobyA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZXZhbD1GQUxTRQopCmBgYAoqVGhlIFIgbWFya2Rvd24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIHB1bGxkb3duIG1lbnUgZm9yKiBDb2RlICphdCB0aGUgdXBwZXItcmlnaHQsIGNob29zZSAiRG93bmxvYWQgUm1kIiwgb3IgW2Rvd25sb2FkIHRoZSBSbWQgZnJvbSBHaXRIdWJdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLWF1dG9tYXRpb24vbWFzdGVyL2Zvci1zY3JpcHRlcnMvUi9ub3RlYm9va3Mvc2NOZXRWaXotVXNlLUNhc2VzLlJtZCkuKgoKPGhyIC8+CnNjTmV0Vml6IGlzIGEgQ3l0b3NjYXBlIGFwcCBkZXNpZ25lZCB0byBzdXBwb3J0IHRoZSBiaW9sb2dpY2FsIGludGVycHJldGF0aW9uIG9mIHNjUk5Bc2VxIGV4cGVyaW1lbnRzLiBUaGlzIG5vdGVib29rIGRlc2NyaWJlcyB0aGUgYXV0b21hdGlvbiBvZiB0aGUgc2NOZXRWaXogYXBwIHVzaW5nIHRoZSBSQ3kzIHBhY2thZ2UgdmlhIHR3byB1c2UgY2FzZXMuCgojIFNldHVwCgpUaGUgZm9sbG93aW5nIHVzZSBjYXNlcyByZXF1aXJlIGluc3RhbGxhdGlvbiBvZiBDeXRvc2NhcGUsIHRoZSBzY05ldFZpeiBhcHAgYW5kIFJDeTMgbGlicmFyeS4gRG93bmxvYWQgdGhlIGxhdGVzdCBbaHR0cDovL3d3dy5jeXRvc2NhcGUub3JnL2Rvd25sb2FkLnBocF0oQ3l0b3NjYXBlKSBhbmQgbG9hZCBSQ3kzIHBhY2thZ2U6IApgYGB7cn0KaWYoISJSQ3kzIiAlaW4lIGluc3RhbGxlZC5wYWNrYWdlcygpKXsKICAgIGluc3RhbGwucGFja2FnZXMoIkJpb2NNYW5hZ2VyIikKICAgIEJpb2NNYW5hZ2VyOjppbnN0YWxsKCJSQ3kzIikKfQpsaWJyYXJ5KFJDeTMpCmBgYAoKTGF1bmNoIEN5dG9zY2FwZSBhbmQga2VlcCBpdCBydW5uaW5nIHdoZW5ldmVyIHVzaW5nIFJDeTMuIENvbmZpcm0gdGhhdCB5b3UgaGF2ZSBldmVyeXRoaW5nIGluc3RhbGxlZCBhbmQgdGhhdCBSQ3kzIGlzIGNvbW11bmljYXRpbmcgd2l0aCBDeXRvc2NhcGU6CmBgYHtyIGV2YWw9RkFMU0V9CiBjeXRvc2NhcGVQaW5nICgpCmBgYAoKSW5zdGFsbCB0aGUgc2NOZXRWaXogYW5kIHN0cmluZ0FwcCBDeXRvc2NhcGUgYXBwczoKYGBge3J9Cmluc3RhbGxBcHAoJ1NUUklOR2FwcCcpICAKaW5zdGFsbEFwcCgnc2NOZXRWaXonKQpgYGAKCiMgVXNlIENhc2UgMQpJbiB0aGlzIGV4YW1wbGUsIHdlIHdpbGwgYnJvd3NlIGEgc2luZ2xlIGNlbGwgZXhwcmVzc2lvbiBhdGxhcyBmcm9tIHdpdGhpbiBDeXRvc2NhcGUsIGV4cGxvcmUgYSBwYXJ0aWN1bGFyIGRhdGFzZXQsIHBlcmZvcm0gZGlmZmVyZW50aWFsIGV4cHJlc3Npb24gYW5hbHlzaXMgYmFzZWQgb24gcHJvdmlkZWQgY2F0ZWdvcmllcywgZ2VuZXJhdGUgbmV0d29ya3MgZnJvbSB0aGUgdG9wIGdlbmVzIGZyb20gZWFjaCBjYXRlZ29yeSwgYW5kIGZ1bmN0aW9uYWxseSBjaGFyYWN0ZXJpemUgYW5kIHZpc3VhbGl6ZSB0aGUgbmV0d29ya3MuIAoKIyMgTG9hZCBkYXRhClRoaXMgbG9hZHMgdGhlIGRhdGEgYW5kIG9wZW5zIGFuIGV4cGVyaW1lbnQgdGFibGUgd2l0aCB0aHJlZSB0YWJzLCBuYW1lZCBUUE0sIENhdGVnb3JpZXMgYW5kIERpZmZFeHAuIFdlIGFyZSBnb2luZyB0byBsb2FkIHRoZSBkYXRhc2V0IHdpdGggQWNjZXNzaW9uIG51bWJlciBFLU1UQUItNTU1MzoKYGBge3J9ClJDeTM6OmNvbW1hbmRzUnVuKCdzY25ldHZpeiBsb2FkIGd4YSBleHBlcmltZW50IGFjY2Vzc2lvbj1FLU1UQUItNTU1MycpCmBgYAoKIyMgQ2FsY3VsYXRlIERpZmZlcmVudGlhbCBFeHByZXNzaW9uCldlIHdpbGwgY2FsY3VsYXRlIGRpZmZlcmVudGlhbCBleHByZXNzaW9uIGZvciBLPTQgY2x1c3RlcjogCmBgYHtyfQpSQ3kzOjpjb21tYW5kc1J1bignc2NuZXR2aXogY2FsY3VsYXRlIGRpZmZleHAgYWNjZXNzaW9uPUUtTVRBQi01NTUzJykKYGBgCgojIyBDcmVhdGUgTmV0d29ya3MKRmV0Y2ggcHJvdGVpbiBuZXR3b3JrcyBmb3IgZWFjaCBjbHVzdGVyLiBUaGVyZSBzaG91bGQgYmUgZm91ciBuZXR3b3JrcyAtIG9uZSBlYWNoIGZvciBlYWNoIGNsdXN0ZXIgYW5kIG9uZSBmb3IgYWxsIHRoZSBjbHVzdGVycyBjb2xsZWN0aXZlbHkuIFdlIHdpbGwgYWxzbyBjb2xsZWN0IGEgbGlzdCBvZiBuZXR3b3JrIG5hbWVzIGZvciBkb3duc3RyZWFtIHN0ZXBzLiAKYGBge3J9ClJDeTM6OmNvbW1hbmRzUnVuKCdzY25ldHZpeiBjcmVhdGUgbmV0d29yayBhY2Nlc3Npb249RS1NVEFCLTU1NTMnKQpuZXR3b3JrcyA8LSBnZXROZXR3b3JrTGlzdCgpCmBgYAoKIyMgQWx0ZXJuYXRpdmU6IENhbGN1bGF0ZSBEaWZmZXJlbnRpYWwgRXhwcmVzc2lvbiBhbmQgQ3JlYXRlIE5ldHdvcmtzClRoaXMgaXMgYSBvbmUtc3RlcCBhbHRlcm5hdGl2ZSB3aGljaCByZXBsYWNlcyB0aGUgdHdvIHN0ZXBzIGFib3ZlLgpgYGB7cn0KUkN5Mzo6Y29tbWFuZHNSdW4oJ3NjbmV0dml6IGNyZWF0ZSBhbGwgZXhwZXJpbWVudD1FLU1UQUItNTU1MycpCmBgYAoKIyMgRnVuY3Rpb25hbCBFbnJpY2htZW50IEFuYWx5c2lzCkZvciBlYWNoIG9mIHRoZSBuZXR3b3Jrcywgd2UgY2FuIG5vdyBjYWxjdWxhdGUgZnVuY3Rpb25hbCBlbnJpY2htZW50IHVzaW5nIHRoZSBzdHJpbmdBcHAuIEVhY2ggbmV0d29yayBpcyBmaXJzdCAic3RyaW5naWZpZWQiIHRvIGVuYWJsZSB0aGUgcmV0cmlldmFsIG9mIGZ1bmN0aW9uYWwgZW5yaWNobWVudDogCmBgYHtyfQpsYXBwbHkobmV0d29ya3MsIGZ1bmN0aW9uICh4KXsKICBzZXRDdXJyZW50TmV0d29yayh4KQogIHByaW50KHgpCiAgUkN5Mzo6Y29tbWFuZHNSdW4oJ3N0cmluZyByZXRyaWV2ZSBlbnJpY2htZW50IGFsbE5ldFNwZWNpZXM9TXVzIG11c2N1bHVzJykKICBSQ3kzOjpjb21tYW5kc1J1bignc3RyaW5nIHNob3cgZW5yaWNobWVudCcpCiAgUkN5Mzo6Y29tbWFuZHNSdW4oJ3N0cmluZyBzaG93IGNoYXJ0cycpCn0pCmBgYAoKIyBVc2UgQ2FzZSAyCgpJbiB0aGlzIGV4YW1wbGUsIHdlIHdpbGwgaW1wb3J0IG5vcm1hbGl6ZWQgc2NSTkEtc2VxIGRhdGEgYW5kIGNsdXN0ZXIgYXNzaWdubWVudHMgZnJvbSBsb2NhbCBmaWxlcywgZ2VuZXJhdGUgY2VsbCBwbG90cywgcGVyZm9ybSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiBhbmFseXNpcyBiYXNlZCBvbiBwcm92aWRlZCBjYXRlZ29yaWVzLCB2aXN1YWxpemUgYXMgYSBjb21iaW5lZCBoZWF0bWFwIGFuZCBnZW5lcmF0ZSBuZXR3b3JrcyBmcm9tIHRoZSB0b3AgZ2VuZXMgZnJvbSBlYWNoIGNhdGVnb3J5LgoKIyMgTG9hZCBkYXRhIGZyb20gZmlsZQoKVGhpcyBub3RlYm9vayBkb3dubG9hZHMgYW5kIGV4cG9ydHMgZmlsZXMgdG8gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgY29weSBvZiB0aGUgUm1kIGZpbGU6CmBgYHtyIGV2YWw9RkFMU0V9CndvcmtpbmdEaXIgPC0gZ2V0d2QoKQpgYGAKCmBgYHtyfQp1cmwgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLWF1dG9tYXRpb24vbWFzdGVyL2Zvci1zY3JpcHRlcnMvUi9ub3RlYm9va3Mvc2NOZXRWaXovRS1NVEFCLTU1NTMtbm9ybWFsaXNlZC1maWxlcy56aXAiCgpwYXRoIDwtIGZpbGUucGF0aCh3b3JraW5nRGlyLCAiRS1NVEFCLTU1NTMtbm9ybWFsaXNlZC1maWxlcy56aXAiKQpkb3dubG9hZC5maWxlKHVybCwgcGF0aCkKdW56aXAocGF0aCwgb3ZlcndyaXRlPVQsIGV4ZGlyPSJFLU1UQUItNTU1MyIpCgpjb21wbGV0ZUZpbGVQYXRoIDwtIGZpbGUucGF0aCh3b3JraW5nRGlyLCJFLU1UQUItNTU1MyIpCgpjb21tYW5kVG9Mb2FkRmlsZSA8LSBwYXN0ZTAoJ3NjbmV0dml6IGxvYWQgZXhwZXJpbWVudCBmaWxlIGZpbGU9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlRmlsZVBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHNwZWNpZXM9TXVzIG11c2N1bHVzJykKUkN5Mzo6Y29tbWFuZHNSdW4oY29tbWFuZFRvTG9hZEZpbGUpCmBgYAoKIyMgTG9hZCB0aGUgY2F0ZWdvcnkgZGF0YQpgYGB7cn0KY29tcGxldGVGaWxlUGF0aCA8LSBmaWxlLnBhdGgod29ya2luZ0RpciwgIkUtTVRBQi01NTUzLWRhdGEvRS1NVEFCLTU1NTMuY2x1c3RlcnMudHN2IikKY29tbWFuZFRvQWRkQ2F0ZWdvcnkgPC0gcGFzdGUwKCdzY25ldHZpeiBhZGQgZmlsZSBjYXRlZ29yeSBmaWxlPScsY29tcGxldGVGaWxlUGF0aCkKUkN5Mzo6Y29tbWFuZHNSdW4oY29tbWFuZFRvQWRkQ2F0ZWdvcnkpCmBgYAoKIyMgR2VuZXJhdGUgYSBVTUFQIHBsb3QKYGBge3J9ClJDeTM6OmNvbW1hbmRzUnVuKCdzY25ldHZpeiBjYWxjdWxhdGUgVU1BUCBzY2FsZT10cnVlJykKYGBgCgojIyBQZXJmb3JtIGRpZmZlcmVudGlhbCBleHByZXNzaW9uIGFuYWx5c2lzCmBgYHtyfQpSQ3kzOjpjb21tYW5kc1J1bignc2NuZXR2aXogY2FsY3VsYXRlIGRpZmZleHAgYWNjZXNzaW9uPUUtTVRBQi01NTUzIGNhdGVnb3J5Um93PTMnKQpgYGAKCiMjIEdlbmVyYXRlIGhlYXRtYXAKR2VuZXJhdGUgYSBoZWF0bWFwIHNob3dpbmcgdGhlIHRvcCBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgZ2VuZXM6CmBgYHtyfQpSQ3kzOjpjb21tYW5kc1J1bignc2NuZXR2aXogPz8nKQpgYGAKCiMjIEZldGNoIHByb3RlaW4gbmV0d29ya3MKYGBge3J9ClJDeTM6OmNvbW1hbmRzUnVuKCdzY25ldHZpeiBjcmVhdGUgbmV0d29yayBhY2Nlc3Npb249RS1NVEFCLTU1NTMnKQpgYGAKCgoKCgoK